// Copyright Epic Games, Inc. All Rights Reserved.

#include "CircumferenceMarkerWidget.h"


#include UE_INLINE_GENERATED_CPP_BY_NAME(CircumferenceMarkerWidget)

class SWidget;

/**
 * 构造函数
 * @param ObjectInitializer 对象初始化器
 */
UCircumferenceMarkerWidget::UCircumferenceMarkerWidget(const FObjectInitializer& ObjectInitializer)
	: Super(ObjectInitializer)
{
	SetVisibility(ESlateVisibility::HitTestInvisible); //设置可见性为命中测试不可见
	bIsVolatile = true; //设置为易变
}

/**
 * 释放Slate资源
 * @param bReleaseChildren 是否同时释放子资源
 */
void UCircumferenceMarkerWidget::ReleaseSlateResources(bool bReleaseChildren)
{
	Super::ReleaseSlateResources(bReleaseChildren); //调用父类释放资源

	MyMarkerWidget.Reset(); //重置我的标记控件
}

/**
 * 重新构建控件
 * @return 共享引用到Slate控件
 */
TSharedRef<SWidget> UCircumferenceMarkerWidget::RebuildWidget()
{
	MyMarkerWidget = SNew(SCircumferenceMarkerWidget) //创建新的圆周标记控件
		.MarkerBrush(&MarkerImage) //设置标记画刷
		.Radius(this->Radius) //设置半径
		.MarkerList(this->MarkerList); //设置标记列表

	return MyMarkerWidget.ToSharedRef(); //返回共享引用
}

/**
 * 同步属性
 */
void UCircumferenceMarkerWidget::SynchronizeProperties()
{
	Super::SynchronizeProperties(); //调用父类同步属性

	MyMarkerWidget->SetRadius(Radius); //设置半径
	MyMarkerWidget->SetMarkerList(MarkerList); //设置标记列表
}

/**
 * 设置半径
 * @param InRadius 新的半径值
 */
void UCircumferenceMarkerWidget::SetRadius(float InRadius)
{
	Radius = InRadius; //更新半径
	if (MyMarkerWidget.IsValid()) //如果控件有效
	{
		MyMarkerWidget->SetRadius(InRadius); //设置半径
	}
}